package 树;

public class Leedcode606根据二叉树创建字符串 {
    StringBuilder sb = new StringBuilder();

    /**
     * 给我一个二叉树我就能够将他按照先序遍历的方式转换成字符串
     * @param root
     * @return
     */
    public String tree2str(TreeNode root) {
        //如果根节点为空，则不用转换，直接返回空串
        if (root == null){
            return sb.toString();
        }
        //走到这里说明至少存在一个节点，按照先序遍历，先将节点的值添加到sb中
        sb.append(root.val);
        if (root.left == null){//如果左子树为空,
            if (root.right != null){
                sb.append("()");
            }
        }else {//左子树不为空
            sb.append("(");
            tree2str(root.left);
            sb.append(")");
        }

        if (root.right != null){
            sb.append("(");
            tree2str(root.right);
            sb.append(")");
        }
        return sb.toString();








//        一下是自己的代码
//        //如果左右子树都为空，则直接返回
//        if (root.left == null && root.right == null){
//            return sb.toString();
//        }
//        if (root.right != null && root.left == null){
//            //左子树为空，右子树不为空，需要在右子树之前添加一个（），用来区分是右子树，而不是左子树
//            sb.append("()(");
//            //然后将右子树转换成字符串的方法交给具有改功能的方法去实现
//            tree2str(root.right);
//            //右子树的节点遍历完成以后，需要添加一个右括号
//            sb.append(")");
//        }
//        if(root.left != null && root.right == null){
//            sb.append("(");
//            tree2str(root.left);
//            sb.append(")");
//        }
//
//        if(root.left != null && root.right != null){
//            sb.append("(");
//            tree2str(root.left);
//            sb.append(")");
//            sb.append("(");
//            tree2str(root.right);
//            sb.append(")");
//        }
//        return sb.toString();
    }
}
